package org.pet.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTUtils {

    private static final String KEY = "pet-ygl";

    /**
     * 生成jwt令牌
     */
    public static String getToken(Map<String,Object> claims){
        // 生成jwt的代码
        return JWT.create()
                .withClaim("claims", claims) // 添加载荷
                .withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60*12)) // 添加过期时间12个小时
                .sign(Algorithm.HMAC256(KEY)); // 加密算法为:Algorithm.HMAC256，密钥为:pet-ygl
    }

    /**
     * 验证jwt令牌信息
     */
    public static Map<String,Object> verifyToken(String token){

        return JWT.require(Algorithm.HMAC256(KEY))
                .build()
                .verify(token)
                .getClaims()
                .get("claims")
                .asMap();
        //篡改头部载荷部分数据，验证失败
        //密钥错误，验证失败
        //超出过期时间，验证失败
    }
}
